<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>2.数组的reduce方法</title>
	</head>
	<body>
		<script type="text/javascript" >
			/* 
				数组的reduce方法（很常用）：
              语法：arr.reduce((preValue, current, index, arr) => {} ,initialValue)
									preValue:
												第1次执行回调时为给定的初始值initialValue，以后是上一次执行回调时的返回值。
												备注：若没有传入initialValue，则第1次的preValue值是数组中第一个元素的值。
									current 表示当前正在处理的元素；
									initialValue 表示初始值。一般做数学运算时设置为0，若为筛选最值可以不传。
									arr：当前操作的数组
									index 表示当前正在处理的数组元素的索引，若传入了initialValue值，则为0，否则为1；
			*/
			
			let arr = [1,2,3,67,4,5]
			
			//reduce功能一：累计计算（注意：累乘的时候不要让初始值为0，否则白玩）
			let result = arr.reduce((preValue,current) => {
				return preValue + current
			},0)

			//reduce功能二：条件统计，需求：算出数组中有几个奇数？（最好要传初始值，且初始值为0）
			let result2 = arr.reduce((preValue,current)=>{
				return preValue + ( current % 2 ? 1 : 0 )
			},0)

			//reduce功能三：条件计算，需求：求出数组所有奇数的和（最好要传初始值，且初始值为0）
			let result3 = arr.reduce((preValue,current)=>{
				return preValue + ( current % 2 ? current : 0)
			},0)
			
			//reduce功能四：筛选最值，需求：得到数组中最大的数（不要传初始值，因为这样效率高）
			let result4 = arr.reduce((preValue,current)=>{
				return Math.min(preValue,current)
			})

		</script>
	</body>
</html>